home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-10-19 | 71.0 KB | 3,052 lines |
-
- ; 22. 4.94
- ; 7.11.94 Uebersicht mit Rand
- ; 3. 1.95 option -c (kein Farbaenderung durch rechte Maustaste)
- ; option -m (zusaetzlich keine Mischfarben)
- ; 11. 1.95 PostScript Plot
- ; 15. 5.95 enable plane 0-3 nach new_color
- ; 20. 8.95 edit mode
- ; 28. 9.95 SHIFT DEL
- ; 17.10.95
-
- ; klee@informatik.unibw-muenchen.de
-
- nolist
- check=$542d4dcd
- ycount=32 ; 1,2,4,6,16 oder 32
- color_file='loc.'
-
- @=$100
-
- start: br.w main
-
- ende: move.w #meld5,r0
- bsr.w print_string
- move.w #$4c00,r0
- trap #$21
-
-
- read_ch:
- ; Eingabe: keine
- ; Ausgabe: r0.b : ascii m0.b : erweiterter Code
- move.w #0,r0
- move.w r3,-(sp)
- trap #$16
- move.w (sp)+,r3
- rts.w
-
- read_if_ch:
- ; Eingabe: keine
- ; Ausgabe: z-flag = 0 fall Zeichen vorhanden, dann:
- ; r0.b : ascii m0.b : erweiterter Code
- move.w #$100,r0
- trap #$16
- rts.w
-
- print_ch:
- ; Eingabe: r0.b auszugebendes Zeichen
- ; Ausgabe: keine
- movem.l r0-r7,-(sp)
- move.w s1,-(sp)
- move.b #$0e,m0
- move.b #0,r3
- trap #$10
- move.w (sp)+,s1
- movem.l (sp)+,r0-r7
- rts.w
-
- print_string:
- ; Eingabe: r0.w{s0} : pointer auf string durch 0 abgeschlossen
- ; Ausgabe: keine
- movem.l r0-r7,-(sp)
- move.w r0,r3
-
- _20: move.b (r3.w),r0
- tst.b r0,r0
- beq.b _10
- inc.w r3
- bsr.w print_ch
- br.b _20
- _10: movem.l (sp)+,r0-r7
- rts.w
-
-
- print_hex_l:
- ; Eingabe r0.l auszugebendes Langwort
- ; Ausgabe keine
- movem.l r0-r7,-(sp)
- move.l r0,r1
-
- move.w #8,r2
- _20: rol.l #4,r1
- move.b r1,r0
- andq.l #$0f,r0
- add.b #'0',r0
- cmp.b #'9',r0
- bls.b _10
- add.b #'a'-'9'-1,r0
- _10: bsr.w print_ch
- dbf.w r2,_20
- movem.l (sp)+,r0-r7
- rts.w
-
- maus_init:
- movem.w r0-r7,-(sp)
- move.w #$0007,r0
- move.w #639,r1
- eor.w r2,r2
- trap #$33
- move.w #$0008,r0
- move.w #479,r1
- eor.w r2,r2
- trap #$33
- movem.w (sp)+,r0-r7
- rts.w
-
- maus_on:
- move.w r0,-(sp)
- move.w #1,r0
- trap #$33
- move.w (sp)+,r0
- rts.w
-
-
- maus_off:
- move.w r0,-(sp)
- move.w #2,r0
- trap #$33
- move.w (sp)+,r0
- br.w set_gmode ; jsr + rts
- ; rts.w
-
- maus_off0:
- move.w r0,-(sp)
- move.w #2,r0
- trap #$33
- move.w (sp)+,r0
- br.w set_gmode0 ; jsr + rts
- ; rts.w
-
- maus_read:
- move.w r1,-(sp)
- move.w r2,-(sp)
- move.w r3,-(sp)
- move.w #3,r0
- trap #$33
- move.w r1,ypos
- move.w r2,xpos
- move.w r3,r0
- move.w (sp)+,r3
- move.w (sp)+,r2
- move.w (sp)+,r1
- rts.w
-
- init_graph:
- move.w r0,-(sp)
- move.w r1,-(sp)
-
- move.w #$12,r0 ; 640x480 16 Farben
- trap #$10
-
- move.w (sp)+,r1
- move.w (sp)+,r0
-
- br.w set_gmode ; jsr + rts
- ; rts.w
-
-
- set_gmode0:
- move.w r0,-(sp)
- move.w r1,-(sp)
-
- move.w #$3ce,r1
- move.w #$0001,r0
- out.w r0,r1 ; Disable Set/Reset = 0
-
- move.w #$0005,r0 ; Write Mode 0
- out.w r0,r1
-
- move.w #$ee08,r0 ; Mask Register
- out.w r0,r1
-
- move.w (sp)+,r1
- move.w (sp)+,r0
- rts.w
-
- set_gmode1:
- move.w r0,-(sp)
- move.w r1,-(sp)
-
- move.w #$3ce,r1
- move.w #$0001,r0
- out.w r0,r1 ; disable Set/Reset = 0
-
- move.w #$0005,r0 ; Write Mode 0
- out.w r0,r1
-
- move.w #$ff08,r0 ; Mask Register
- out.w r0,r1
-
- move.w (sp)+,r1
- move.w (sp)+,r0
- rts.w
-
-
- set_gmode:
- move.w r0,-(sp)
- move.w r1,-(sp)
-
- move.w #$3ce,r1
- move.w #$0f01,r0
- out.w r0,r1 ; Enable Set/Reset = f
-
- move.w #$0305,r0 ; Write Mode 3
- out.w r0,r1
-
- move.w #$ff08,r0 ; Mask Register
- out.w r0,r1
-
- move.w (sp)+,r1
- move.w (sp)+,r0
- rts.w
-
- set_grau_palette:
- movem.w r0-r7,-(sp)
- move.w #palette_grau,r5
- br.b set_palette1
- set_palette:
- movem.w r0-r7,-(sp)
- move.w #palette,r5
- set_palette1:
- move.w #$3c8,r1
-
- eor.b r0,r0
- out.b r0,r1
- move.w #6*3,r2
- bsr.w _200
-
- move.b #$14,r0
- out.b r0,r1
- move.w #1*3,r2
- bsr.w _200
-
- move.b #$07,r0
- out.b r0,r1
- move.w #1*3,r2
- bsr.w _200
-
- move.b #$38,r0
- out.b r0,r1
- move.w #8*3,r2
- bsr.w _200
- movem.w (sp)+,r0-r7
- rts.w
-
- _200: inc.w r1
- _210: move.b (r5.w),r0
- inc.w r5
- out.b r0,r1
- dbf.w r2,_210
- dec.w r1
- rts.w
-
- set_color:
- ; setzt color als die aktuelle Farbe
- ; veraendert keine Register
- move.w r0,-(sp)
- move.w r1,-(sp)
- move.w #$3ce,r1
- move.b color,m0
- and.b #$0f,m0
- eor.b r0,r0
- out.w r0,r1
- move.w (sp)+,r1
- move.w (sp)+,r0
- rts.w
-
-
- fill_screen:
- ; loescht Bildschirm mit Farbe color
- ; veraendert keine Register
- move.l r0,-(sp)
- move.w r1,-(sp)
- move.w r2,-(sp)
- move.w r6,-(sp)
-
- bsr.w set_color
-
- ; bsr.w set_gmode
-
- move.w #640*480/32,r2
- eor.l r0,r0
- dec.l r0
- eor.w r6,r6
- _10: move.l r0,(r6.w){s1}
- addq.w #4,r6
- dbf.w r2,_10
-
- move.w (sp)+,r6
- move.w (sp)+,r2
- move.w (sp)+,r1
- move.l (sp)+,r0
- rts.w
-
- black_gitter:
- ; veraendert keine Register
- move.l r0,-(sp)
- move.w r1,-(sp)
- move.w r2,-(sp)
- move.w r6,-(sp)
-
- move.w #0,color
- bsr.w set_color
-
- ; bsr.w set_gmode
-
- move.w #10*480,r2
- move.b #1,r0
- move.w #7,r6
- _10: move.b (r6.w){s1},r1
- move.b r0,(r6.w){s1}
- add.w #8,r6
- dbf.w r2,_10
-
- eor.l r0,r0
- dec.l r0
- move.w #80*47,r6
- move.w #10,r1
- _21: move.w #20,r2
- _20: move.l r0,(r6.w){s1}
- addq.w #4,r6
- dbf.w r2,_20
- add.w #80*47,r6
- dec.w r1
- bne.b _21
-
- move.w (sp)+,r6
- move.w (sp)+,r2
- move.w (sp)+,r1
- move.l (sp)+,r0
- rts.w
-
-
- hintergrund_halb:
- movem.l r0-r7,-(sp)
- move.w #40/4,r1
- move.w #40,r4
- br.b hintergrund0
-
- hintergrund:
- movem.l r0-r7,-(sp)
- move.w #80/4,r1
- eor.w r4,r4
- hintergrund0:
-
- ; bsr.w set_gmode
-
- move.w #15,color
- bsr.w set_color
-
- eor.w r5,r5
- move.w #480,r3
- _10: move.w r1,r2
- _20: move.b (r5.w){s1},r0
- move.b 3.b(r5.w){s2},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b 1.b(r5.w){s2},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b -1.b(r5.w){s2},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b -3.b(r5.w){s2},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- dbf.w r2,_20
- add.w r4,r5
- dec.w r3
- bne.b _10
-
- movem.l (sp)+,r0-r7
- rts.w
-
-
- fill: movem.l r0-r7,-(sp)
-
- move.l #-1,_oben ; falls kein fill, aus fillbuf loeschen
-
- eor.l r6,r6
- eor.l r0,r0
- move.w #80*480/4,r2
- _10: move.l r0,(r6.w){s3}
- addq.w #4,r6
- dbf.w r2,_10
-
- move.w #xpos,r5
- move.w #ypos,r6
- move.w #1,r0
- eor.w r1,r1
- move.w #1,r3
-
- br.b _130
-
- _132: add.w r0,(r5.w)
- inc.w r1
- cmp.w r1,r3
- bne.b _130
- eor.w r1,r1
- exg.w r5,r6
- cmp.w #xpos,r5
- bne.b _130
- neg.w r0
- inc.w r3
- cmp.w #20,r3
- bhi.w _100
-
- _130: cmp.w #639,xpos
- bhi.b _132
- cmp.w #479,ypos
- bhi.b _132
-
- muls.l #640,ypos,r2
- add.l xpos,r2
- eor.b #$1f,r2
- btst.l r2,0.w{s2}
- bcc.b _132
- bset.l r2,0.w{s3}
-
- cmp.b #$7f,3{s2}
- bne.b _131
- cmp.w #320,xpos
- blo.w _100
-
- _131: move.l ypos,r4
- move.w r4,_oben
- move.w r4,_unten
- move.w r4,r3
- bsr.w _fill_line
- br.b _28
-
- _25: move.w _unten,r3
- move.w _oben,r4
- move.w #0,_unten
- move.w #1000,_oben
- _28: cmp.w #479,r3
- bhs.b _20
- inc.w r3
- _20: inc.w r4
- cmp.w r3,r4
- bhi.b _29
- _27: muls.l #80,r4,r5
- _24: move.w #20,r2
-
- _23: move.l -80.b(r5.w){s3},r0
- or.l (r5.w){s3},r0
- and.l (r5.w){s2},r0
- cmp.l r0,(r5.w){s3}
- bne.b _22
- addq.w #4,r5
- dbf.w r2,_23
- br.b _20
-
- _21: move.l -80.b(r5.w){s3},r0
- or.l (r5.w){s3},r0
- and.l (r5.w){s2},r0
- _22: move.l r0,(r5.w){s3}
- addq.w #4,r5
- dbf.w r2,_21
- bsr.w _fill_line
- bcc.b _26
- move.w r4,_unten
- cmp.w _oben,r4
- bhs.b _26
- move.w r4,_oben
- _26: inc.w r4
- cmp.w #479,r4
- bls.b _27
- _29: cmp.w #1000,_oben
- beq.b _50
-
- move.w _oben,r3
- move.w _unten,r4
- move.w #0,_unten
- move.w #1000,_oben
-
- dec.w r3
- bpl.b _30
- inc.w r3
-
- _30: dec.w r4
- bmi.b _39
- cmp.w r3,r4
- blo.b _39
- _37: muls.l #80,r4,r5
- _34: move.w #20,r2
-
- _33: move.l 80.b(r5.w){s3},r0
- or.l (r5.w){s3},r0
- and.l (r5.w){s2},r0
- cmp.l r0,(r5.w){s3}
- bne.b _32
- addq.w #4,r5
- dbf.w r2,_33
- br.b _30
-
- _31: move.l 80.b(r5.w){s3},r0
- or.l (r5.w){s3},r0
- and.l (r5.w){s2},r0
- _32: move.l r0,(r5.w){s3}
- addq.w #4,r5
- dbf.w r2,_31
- bsr.w _fill_line
- bcc.b _36
- move.w r4,_oben
- cmp.w _unten,r4
- bls.b _36
- move.w r4,_unten
- _36: dec.w r4
- bpl.b _37
- _39: cmp.w #1000,_oben
- bne.w _25
-
- _50:
- cmp.b #$7f,3{s2}
- bne.b _51
- eor.l r6,r6
- eor.l r0,r0
-
- move.w #480,r1
- _53: move.w #80/2/4,r2
- _52: move.l r0,(r6.w){s3}
- addq.w #4,r6
- dbf.w r2,_52
- add.w #40,r6
- dec.w r1
- bne.b _53
-
- _51:
-
- ; bsr.w set_gmode
- move.w color1,r0
- move.w r0,color
- bsr.w set_color
-
-
- move.w #-1,r1
- eor.w r5,r5
- move.w #80*480/4,r2
- _99: move.l (r5.w){s3},r0
- or.l r0,r0
- bne.b _96
- addq.w #4,r5
- dbf.w r2,_99
- br.b _97
-
- _96: or.w r1,r1
- bpl.b _98
-
- move.l r0,r4
- inc.w r1
- move.w #80*480/4,r0
- sub.w r2,r0
- lsl.w #2,r0
- move.w #80,r3
- divu.w r3,r1|r0
- lsl.l #16,r0
- move.w r1,r0
- lsl.w #3,r0
- bscr.l r4,r1
- eor.b #$1f,r1
- add.w r1,r0
- move.l r0,r1
-
- _98: move.b (r5.w){s1},r0
- move.b 3.b(r5.w){s3},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b 1.b(r5.w){s3},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b -1.b(r5.w){s3},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b -3.b(r5.w){s3},r0
- move.b r0,(r5.w){s1}
- inc.w r5
- dbf.w r2,_99
- _97:
-
- move.w color2,r0
- cmp.w color1,r0
- beq.b _91
- move.w r0,color
- bsr.w set_color
-
- ; falls mischfarben
- eor.w r5,r5
- move.b #$55,r3
- move.w #480,r4
-
- _93: move.w #80/4,r2
- ror.b #1,r3
- _92: move.l (r5.w){s3},r0
- or.l r0,r0
- bne.b _94
- addq.w #4,r5
- dbf.w r2,_92
- dec.w r4
- bne.b _93
- br.b _91
-
- _94: move.b (r5.w){s1},r0
- move.b 3.b(r5.w){s3},r0
- and.b r3,r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b 1.b(r5.w){s3},r0
- and.b r3,r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b -1.b(r5.w){s3},r0
- and.b r3,r0
- move.b r0,(r5.w){s1}
- inc.w r5
- move.b (r5.w){s1},r0
- move.b -3.b(r5.w){s3},r0
- and.b r3,r0
- move.b r0,(r5.w){s1}
- inc.w r5
- dbf.w r2,_92
- dec.w r4
- bne.b _93
-
- _91: move.l r1,r0
- move.l r0,_oben
- move.w #fillbuff,r5
- move.w fillcount,r2
- or.w r2,r2
- beq.b _83
- _82: cmp.l (r5.w),r0
- beq.b _81
- addq.w #6,r5
- dbf.w r2,_82
- _83: inc.w fillcount
- cmp.w #maxfill,fillcount
- blo.b _85
- dec.w fillcount
- br.b _100
- _85: move.l r0,(r5.w)
- _81: move.b color1,r0
- move.b color2,m0
- move.w r0,4.b(r5.w)
-
- cmp.w #$0f0f,r0
- bne.b _100
- cmp.b #$7f,3{s2}
- beq.b _100
- cmp.b #$bf,3{s2}
- beq.b _100
-
- addq.w #6,r5
- _70: cmp.w #fillbuff_end,r5
- bhs.b _71
- move.w (r5.w),r0
- move.w r0,-6.b(r5.w)
- addq.w #2,r5
- br.b _70
- _71: dec.w fillcount
-
- _100: movem.l (sp)+,r0-r7
- move.l _oben,r0
- rts.w
-
- even4
- _oben: dc.w 0
- _unten: dc.w 0
-
- _fill_line:
- eor.w r6,r6
- muls.l #80,r4,r5
- eor.b r0,r0
- move.w #20,r2
- _fl20: lsr.b #1,r0 ; Bit 0 in Carry
- move.l (r5.w){s3},r0
- move.l r0,r1
- rocr.l #1,r0
- br.b _fl23
- _fl21: lsr.l #1,r0
- _fl23: or.l r1,r0
- and.l (r5.w){s2},r0
- cmp.l r1,r0
- beq.b _fl22
- move.w #-1,r6
- move.l r0,r1
- br.b _fl21
- _fl22: move.l r0,(r5.w){s3}
- addq.w #4,r5
- dbf.w r2,_fl20
-
- eor.l r0,r0
- move.w #20,r2
- _fl30: subq.w #4,r5
- lsl.l #1,r0 ; Bit 31 in Carry
- move.l (r5.w){s3},r0
- move.l r0,r1
- rocl.l #1,r0
- br.b _fl33
- _fl31: lsl.l #1,r0
- _fl33: or.l r1,r0
- and.l (r5.w){s2},r0
- cmp.l r1,r0
- beq.b _fl32
- move.w #-1,r6
- move.l r0,r1
- br.b _fl31
- _fl32: move.l r0,(r5.w){s3}
- dbf.w r2,_fl30
-
- lsr.w #1,r6 ; Carry setzen
- rts.w
-
-
- new_color:
- movem.l r0-r7,-(sp)
-
- and.w #$fff8,xpos
- cmp.w #640-64,xpos
- bls.b _10
- move.w #640-64,xpos
- _10: cmp.w #480-64,ypos
- bls.b _11
- move.w #480-64,ypos
- _11: sub.w #64,xpos
- bpl.b _12
- move.w #0,xpos
- _12: sub.w #64,ypos
- bpl.b _13
- move.w #0,ypos
- _13:
- move.w xpos,r0
- move.w r0,xpos1
- move.w ypos,r0
- move.w r0,ypos1
-
- muls.w #80,ypos,r4
- move.w xpos,r1
- lsr.w #3,r1
- add.w r1,r4
- move.w r4,-(sp)
-
- move.w #bild_save,r6
- move.w #$3ce,r1
- move.w #$0004,r0
- out.w r0,r1 ; Plane 0 lesen
- bsr.w _500
- move.w #$0104,r0
- out.w r0,r1 ; Plane 1 lesen
- bsr.w _500
- move.w #$0204,r0
- out.w r0,r1 ; Plane 2 lesen
- bsr.w _500
- move.w #$0304,r0
- out.w r0,r1 ; Plane 3 lesen
- bsr.w _500
-
- _14: move.w #0,color
- ; bsr.w set_gmode
- eor.l r0,r0
- dec.l r0
-
- move.w #4,r1
- _36: move.w #4,r3
- _35: move.w r4,r5
- addq.w #4,r4
- move.w #32,r2
- bsr.w set_color
- inc.w color
- _34: move.l r0,(r5.w){s1}
- add.w #80,r5
- dbf.w r2,_34
- dec.w r3
- bne.b _35
- add.w #32*80-16,r4
- dec.w r1
- bne.b _36
-
- _51: bsr.w maus_read
- or.b r0,r0
- bne.b _51
-
- bsr.w maus_on
- _50: bsr.w maus_read
- tst.b #3,r0
- beq.b _50
- move.b r0,r3
- bsr.w maus_off
-
- move.w xpos,r0
- sub.w xpos1,r0
- bmi.w _60
- cmp.w #4*32,r0
- bhs.w _60
- lsr.w #5,r0
-
- move.w ypos,r1
- sub.w ypos1,r1
- bmi.w _60
- cmp.w #4*32,r1
- bhs.w _60
- lsr.w #5,r1
-
- lsl.w #2,r1
- add.w r1,r0
- move.w r0,color1
- move.w r0,color2
- move.b #0,auto_color
- .no_change_color:
- cmp.b #2,r3
- bne.w _61
- .no_mix_color:
- cmp.w #0,color1
- bls.b _70
- cmp.w #15,color1
- beq.b _70
- move.w (sp)+,r4
- move.w r4,-(sp)
- bsr.w change_color
- bcc.w _61
- br.w _14
-
- _70:; bsr.w set_gmode
- move.w #0,color
- move.w (sp)+,r4
- move.w r4,-(sp)
- move.b #$55,r1
-
-
- _74: bsr.w set_color
- move.w color,r5
- add.w r4,r5
- move.w #8*9,r2
- _71: move.b (r5.w){s1},r0
- move.b r1,(r5.w){s1}
- addq.w #80,r5
- ror.b #1,r1
- dbf.w r2,_71
-
- _79: move.w color,r5
- add.w r4,r5
- eor.w r3,r3
- _77: move.w #8,r2
- _73: move.b (r5.w){s1},r0
- ror.b #1,r1
- move.b r1,(r5.w){s1}
- add.w #80,r5
- dbf.w r2,_73
- cmp.w color,r3
- bne.b _78
- addq.w #16,r5
- _78: dec.w r5
- inc.w r3
- cmp.w #9,r3
- bne.b _77
-
- inc.w color
- cmp.w #15,color
- bls.b _74
-
- _75: bsr.w maus_read
- or.b r0,r0
- bne.b _75
- move.w #0,_color1
- move.w #0,_color2
-
- _90:; bsr.w set_gmode
-
- move.w _color1,r0
- move.w r0,color
- bsr.w set_color
-
- move.w r4,r5
- add.w #9*8*80,r5
- move.w r5,r6
- move.b #$55,r1
- move.w #7*8,r3
- _93: move.w #16,r2
- _92: move.b (r5.w){s1},r0
- move.b r1,(r5.w){s1}
- inc.w r5
- dbf.w r2,_92
- ror.b #1,r1
- addq.w #80-16,r5
- dec.w r3
- bne.b _93
-
- _91: move.w _color2,r0
- move.w r0,color
- bsr.w set_color
-
- ror.b #1,r1
- move.w #7*8,r3
- _96: move.w #16,r2
- _95: move.b (r6.w){s1},r0
- move.b r1,(r6.w){s1}
- inc.w r6
- dbf.w r2,_95
- ror.b #1,r1
- addq.w #80-16,r6
- dec.w r3
- bne.b _96
-
- bsr.w maus_on
- _76: bsr.w maus_read
- tst.b #3,r0
- bne.b _62
-
- move.w xpos,r0
- sub.w xpos1,r0
- bmi.b _20
- cmp.w #16*8,r0
- blo.b _21
- _20: eor.w r0,r0
- eor.w r1,r1
- br.b _29
- _21: lsr.w #3,r0
-
- move.w ypos,r1
- sub.w ypos1,r1
- bmi.b _22
- cmp.w #9*8,r1
- blo.b _23
- _22: eor.w r0,r0
- eor.w r1,r1
- _23: lsr.w #3,r1
- add.w r0,r1
- and.b #$0f,r1
-
-
- _29: cmp.w r0,_color1
- bne.b _24
- cmp.w r1,_color2
- beq.b _76
- _24: move.w r0,_color1
- move.w r1,_color2
- bsr.w maus_off
- br.w _90
-
-
- _62: move.b r0,r3
- bsr.w maus_off
-
- move.w xpos,r0
- sub.w xpos1,r0
- bmi.b _60
- cmp.w #16*8,r0
- bhs.b _60
- lsr.w #3,r0
-
- move.w ypos,r1
- sub.w ypos1,r1
- bmi.b _60
- cmp.w #9*8,r1
- bhs.b _60
- lsr.w #3,r1
- add.w r0,r1
- and.b #$0f,r1
-
- move.w r0,color1
- move.w r1,color2
-
- move.b #0,auto_color
- cmp.b #2,r3
- bne.b _61
- br.w _14
-
-
- _60: move.b #-1,auto_color
- move.w color1,r0
- or.w r0,r0
- bne.b _64
- inc.w r0
- move.w r0,color1
- _64: move.w r0,color2
-
- _61: move.w (sp)+,r4
- move.w #bild_save,r6
- bsr.w set_gmode1
-
- move.w #$3c4,r1
- move.w #$0102,r0 ; plane 0 schreiben
- out.w r0,r1
- bsr.w _600
- move.w #$0202,r0 ; plane 1 schreiben
- out.w r0,r1
- bsr.w _600
- move.w #$0402,r0 ; plane 2 schreiben
- out.w r0,r1
- bsr.w _600
- move.w #$0802,r0 ; plane 3 schreiben
- out.w r0,r1
- bsr.w _600
- move.w #$0f02,r0 ; plane 0-3 schreiben
- out.w r0,r1
-
- _80: bsr.w maus_read
- cmp.b #0,r0
- bne.b _80
-
- _82: bsr.w read_if_ch
- beq.b _81
- bsr.w read_ch
- br.b _82
- _81:
-
- movem.l (sp)+,r0-r7
- rts.w
-
- even
- _color1: dc.w 0
- _color2: dc.w 0
-
- _500: move.w r4,r5
- move.w #4*32,r3
- _520: move.w #4,r2
- _510: move.l (r5.w){s1},r0
- move.l r0,(r6.w)
- addq.l #4,r5
- addq.l #4,r6
- dbf.w r2,_510
- add.w #80-16,r5
- dec.w r3
- bne.b _520
- rts.w
-
-
- _600: move.w r4,r5
- move.w #4*32,r3
- _620: move.w #4,r2
- _610: move.l (r6.w),r0
- move.l r0,(r5.w){s1}
- addq.l #4,r5
- addq.l #4,r6
- dbf.w r2,_610
- add.w #80-16,r5
- dec.w r3
- bne.b _620
- rts.w
-
-
- change_color:
-
- move.w color1,r6
- lsl.w #1,r6
- add.w color1,r6
- add.w #palette,r6
-
- move.w #0,color
-
- ; bsr.w set_gmode
- eor.l r0,r0
- dec.l r0
-
- move.w #2,r3
- move.w r4,r5
-
- _20: move.w #64,r2
- bsr.w set_color
-
- _10: move.l r0,(r5.w){s1}
- move.l r0,4.b(r5.w){s1}
- move.l r0,8.b(r5.w){s1}
- move.l r0,12.b(r5.w){s1}
- add.w #80,r5
- dbf.w r2,_10
-
- move.w color1,r2
- move.w r2,color
- dec.w r3
- bne.b _20
-
- _60: bsr.w maus_read
- or.b r0,r0
- bne.b _60
-
- _50: ; bsr.w set_gmode
- move.w #15,color
- bsr.w set_color
- move.w r4,r5
- add.w #4*80,r5
- eor.l r0,r0
- dec.l r0
-
- bsr.w _200
- add.w #4*80,r5
- bsr.w _200
- add.w #4*80,r5
- bsr.w _200
-
- move.w #0,color
- bsr.w set_color
-
- move.w r4,r3
- add.w #4*80,r3
- move.b #3,m1
- _40:
- eor.w r0,r0
- move.b (r6.w),r0
- inc.w r6
- and.w #$3f,r0
- bne.b _41
- move.w r3,r5
- move.b #$40,r1
- br.b _42
- _41: move.w r0,r5
- lsr.w #2,r5
- add.w r3,r5
- lsl.b #1,r0
- not.b r0
- and.b #$07,r0
- eor.b r1,r1
- bset.w r0,r1
- _42: move.w #16,r2
- _30: move.b (r5.w){s1},r0
- move.b r1,(r5.w){s1}
- addq.w #80,r5
- dbf.w r2,_30
- add.w #20*80,r3
- dec.b m1
- bne.b _40
- subq.w #3,r6
-
- bsr.w maus_read
- eor.w r3,r3
- or.b r0,r0
- beq.b _61
- dec.w r3
- move.w _500,r0
- br.b _62
-
- _61: bsr.w maus_on
- _70: bsr.w maus_read
- tst.b #3,r0
- beq.b _70
- bsr.w maus_off
- cmp.b #2,r0
- beq.b _101
-
- move.w ypos,r0
- move.w r0,_500
- _62: sub.w ypos1,r0
- bmi.b _100
- cmp.w #64,r0
- bhs.b _100
- move.b #22,r1
- divu.b r1,m0|r0
- eor.b m0,m0
- move.w color1,r5
- add.w r5,r0
- lsl.w #1,r5
- add.w r0,r5
-
- move.w xpos,r1
- sub.w xpos1,r1
- bpl.b _71
- or.w r3,r3
- bne.b _73
- cmp.w #-10,r1
- blt.b _100
- _73: eor.w r1,r1
- _71: cmp.w #128,r1
- blo.b _72
- or.w r3,r3
- bne.b _74
- cmp.w #128+10,r1
- bhs.b _100
- _74: move.w #127,r1
- _72: lsr.b #1,r1
- move.b r1,palette(r5.w)
- bsr.w set_palette
- move.b #1,color_changed
- br.w _50
- _100: bclr.w #0,sr
- rts.w
- _101: bset.w #0,sr
- rts.w
-
-
- _200: move.w #16,r2
- _201: move.l r0,(r5.w){s1}
- move.l r0,4.b(r5.w){s1}
- move.l r0,8.b(r5.w){s1}
- move.l r0,12.b(r5.w){s1}
- addq.w #80,r5
- dbf.w r2,_201
- rts.w
- _500: dc.w 0
-
-
- get_dat:
- move.w s0,-(sp)
-
- move.l #'tad.',name2
- move.w #$3d02,r0 ; Datei oeffnen
- move.w #name,r1
- trap #$21
- bcs.w _100 ; Fehler? dann aufhoeren
- move.w r0,r3 ; handle nach r3
-
- move.w s3,r0
- move.w r0,s0
-
- move.w #$4202,r0
- eor.w r1,r1
- eor.w r2,r2
- trap #$21
- lsl.l #16,r1
- move.w r0,r1
- cmp.l #308278,r1 ; 256 Farben bmp
- beq.b _40
- move.w #$4200,r0
- eor.w r1,r1
- eor.w r2,r2
- trap #$21
-
- move.w #$3f00,r0
- move.w #640*480/8+62,r2; max lesen
- eor.w r1,r1
- trap #$21
- move.w r0,r1
-
- move.w #$3e00,r0 ; Datei schliessen
- trap #$21
-
- cmp.w r2,r1
- beq.w _55 ; 2 Farben bmp
- cmp.w #640*480/8,r1
- beq.w _50 ; screen format
-
- _19: eor.w r5,r5
- eor.w r6,r6
- eor.w r1,r1
-
-
- move.w #480/ycount,r3
- _27: move.b #80,m0
- _26: move.w #ycount,r2
- _20: dec.b r1
- bpl.b _21
- dec.b m1
- bpl.b _25
- move.b (r5.w),r1
- inc.w r5
- eor.b r0,r0
- eor.b m1,m1
- or.b r1,r1
- bpl.b _22
- and.b #$7f,r1
- br.b _21
-
- _22: move.b r1,m1
- _25: eor.b r1,r1
- move.b (r5.w),r0
- inc.w r5
-
- _21: move.b r0,(r6.w){s2}
- add.w #80,r6
- dbf.w r2,_20
- sub.w #ycount*80-1,r6
- dec.b m0
- bne.b _26
- add.w #(ycount-1)*80,r6
- dec.w r3
- bne.b _27
- br.w _60
-
-
- _count: dc.w 640*480/(15*1024)
- _buf1=40*1024
- _buf2=$3e
-
- _49: move.w #$3e00,r0 ; Datei schliessen
- trap #$21
- bset.w #0,sr
- br.w _100
-
- _40: move.w #$4200,r0
- eor.w r2,r2
- move.w #1078,r1
- trap #$21
- bcs.w _49
-
- move.w #640*480/(15*1024),_count{s6}
- move.w #_buf2,r6
-
- _41: move.w #$3f00,r0 ; 15 kByte
- move.w #15*1024,r2
- move.w #_buf1,r1 ; in buf1 einlesen
- trap #$21
- bcs.w _49 ; Fehler? dann aufhoeren
- cmp.w #15*1024,r0 ; ganzen Block gelesen
- bne.b _49 ; nein: dann aufhoeren
-
- move.w #_buf1,r5
- move.w #15*1024/8,r4
- _43: move.w #8,r2
- _42: move.b (r5.w),r0
- inc.w r5
- dec.b r0
- add.b #1,r0
- rocl.b #1,m0
- dbf.w r2,_42
- not.b m0
- move.b m0,(r6.w)
- inc.w r6
- dec.w r4
- bne.b _43
- dec.w _count{s6}
- bne.b _41
- move.w #$3e00,r0 ; Datei schliessen
- trap #$21
-
- _55: move.w #$3e,r5
- move.w #480,r3
- move.w #479*80,r6
- _57: move.w #640/8/4,r2
- _56: move.l (r5.w),r0 ;gelesene Daten direkt in bitmap
- addq.w #4,r5
- not.l r0
- move.l r0,(r6.w){s2}
- addq.w #4,r6
- dbf.w r2,_56
- sub.w #640/8*2,r6
- dec.w r3
- bne.b _57
- br.b _60
-
- _50: eor.w r5,r5
- move.w #640*480/8/4,r2
- _51: move.l (r5.w),r0 ;gelesene Daten direkt in bitmap
- move.l r0,(r5.w){s2}
- addq.w #4,r5
- dbf.w r2,_51
-
- _60: bclr.w #0,sr
- _100: move.w (sp)+,s0
- rts.w
-
-
-
- get_bild:
- move.b #0,data_changed
- bsr.w get_dat
- bcs.w _100
- eor.w r5,r5
- move.w #80*480/4,r2
- _61: not.l (r5.w){s2}
-
- move.b (r5.w){s2},r0
- move.b 3.b(r5.w){s2},m0
- move.b m0,(r5.w){s2}
- move.b r0,3.b(r5.w){s2}
- move.b 1.b(r5.w){s2},r0
- move.b 2.b(r5.w){s2},m0
- move.b m0,1.b(r5.w){s2}
- move.b r0,2.b(r5.w){s2}
-
- addq.w #4,r5
- dbf.w r2,_61
-
- move.b #0,color_changed
- move.l #color_file,name2
- move.w #$3d00,r0 ; Datei oeffnen
- move.w #name,r1
- trap #$21
- bcc.w _b50 ; kein Fehler? dann weiter
- _b5: move.w #0,fillcount
- move.w #3*16/4,r2
- move.w #palette_org,r5
- move.w #palette,r6
- _b10: move.l (r5.w),r0
- addq.w #4,r5
- move.l r0,(r6.w)
- addq.w #4,r6
- dbf.w r2,_b10
- bsr.w set_palette
- br.b _b20
-
- _b50: move.w r0,r3 ; handle nach r3
- move.w #$3f00,r0
- move.w #3*16+2+maxfill*4,r2 ; max lesen
- move.w #palette,r1
- trap #$21
-
- move.w #$3e00,r0 ; Datei schliessen
- trap #$21
-
- bsr.w set_palette
-
- move.w #fillbuff,r5
- move.w fillcount,r2
- or.w r2,r2
- beq.b _b20
- cmp.w #maxfill,r2
- bhs.b _b5 ; kann wohl nicht stimmen
-
- move.w r2,r0
- lsl.w #2,r0
- move.w r5,r6
- add.w r0,r5
- add.w r0,r6
- add.w r2,r6
- add.w r2,r6
-
- _b30: subq.w #4,r5
- subq.w #6,r6
- move.l (r5.w),r0
- move.w r0,r1
- and.w #$0fff,r1
- move.w r1,(r6.w)
- lsr.l #8,r0
- lsr.w #4,r0
- move.w r0,2.b(r6.w)
- eor.w r0,r0
- rol.l #12,r0
- lsl.w #4,r0
- rol.l #4,r0
- move.w r0,4.b(r6.w)
- dbf.w r2,_b30
-
- _b20: move.w #0,color
- bsr.w fill_screen
- bsr.w fill_all
- move.b #-1,auto_color
- move.w #1,color1
- move.w #1,color2
- bclr.w #0,sr
- _100: rts.w
-
-
- edit_bild:
- movem.l r0-r7,-(sp)
-
-
- eor.w r5,r5
- move.w #480*80,r2
- _5: move.w 2.b(r5.w){s2},r0
- move.b m0,(r5.w){s3}
- move.b r0,1.b(r5.w){s3}
- move.w (r5.w){s2},r0
- move.b m0,2.b(r5.w){s3}
- move.b r0,3.b(r5.w){s3}
- addq.w #4,r5
- dbf.w r2,_5
-
- bsr.w set_grau_palette
-
- _2: move.w #0,_xoff
- move.w xpos,r0
- sub.w #80,r0
- bmi.b _90
- lsr.w #3,r0
- cmp.w #(640-160)/8,r0
- bls.b _91
- move.w #(640-160)/8,r0
- _91: move.w r0,_xoff
- _90:
- move.w #0,_yoff
- move.w ypos,r0
- sub.w #60,r0
- bmi.b _92
- cmp.w #(480-120),r0
- bls.b _93
- move.w #(480-120),r0
- _93: move.w r0,_yoff
- _92:
-
-
- _1: move.w #$0b,color
- bsr.w fill_screen
-
- bsr.w set_gmode0
- _20: move.w #119,r1
- _10: bsr.w _line
- dec.w r1
- bpl.b _10
-
- bsr.w maus_on
- _29: bsr.w maus_read
- tst.b #7,r0
- bne.b _29
-
- _30: bsr.w maus_read
- tst.b #7,r0
- beq.b _40
- cmp.b #3,r0
- bhs.b _41
- cmp.b #2,r0
- beq.b _35
- bsr.w _draw
- br.b _30
- _35: bsr.w _scroll
- br.b _30
-
- _40: bsr.w read_if_ch
- beq.b _30
- bsr.w read_ch
-
- cmp.b #$01,m0
- beq.w _100
- cmp.b #$12,m0
- beq.w _50
- cmp.b #' ',r0
- bne.b _30
-
- _41: bsr.w maus_off
- bsr.w set_gmode1
- move.w #640*480/32,r2
- eor.w r5,r5
- _59: move.l (r5.w){s3},r0
- move.l r0,(r5.w){s1}
- addq.w #4,r5
- dbf.w r2,_59
-
- bsr.w set_gmode1
- move.w #$3c4,r1
- move.w #$0102,r0 ; plane 2+3 schreiben
- out.w r0,r1
-
- muls.w #80,_yoff,r6
- add.w _xoff,r6
- eor.l r0,r0
- move.w #120,r1
- _71: move.w #5,r2
- _70:
- move.l r0,(r6.w){s1}
- addq.w #4,r6
- dbf.w r2,_70
- add.w #80-5*4,r6
- dec.w r1
- bne.b _71
-
- move.w #$3c4,r1
- move.w #$0f02,r0 ; plane 0+1+2+3 schreiben
- out.w r0,r1
-
-
- bsr.w maus_on
- _62: bsr.w maus_read
- tst.b #7,r0
- bne.b _62
-
- _60: bsr.w maus_read
- tst.b #7,r0
- beq.b _61
- bsr.w maus_off
- cmp.b #1,r0
- beq.w _2
- br.w _1
-
- _61: bsr.w read_if_ch
- beq.b _60
- bsr.w read_ch
- cmp.b #$01,m0
- beq.b _100
- cmp.b #$12,m0
- beq.b _50
- cmp.b #' ',r0
- bne.b _60
- bsr.w maus_off
- br.w _1
-
- _50: eor.w r5,r5
- move.w #480*80,r2
- _6:
- move.b (r5.w){s3},m0
- move.b 1.b(r5.w){s3},r0
- move.w r0,2.b(r5.w){s2}
- move.b 2.b(r5.w){s3},m0
- move.b 3.b(r5.w){s3},r0
- move.w r0,(r5.w){s2}
- addq.w #4,r5
- dbf.w r2,_6
-
-
- move.b #1,data_changed
- _100: bsr.w set_palette
- bsr.w maus_off
- movem.l (sp)+,r0-r7
- rts.w
-
- _line: move.w r1,r5
- add.w _yoff,r5
- muls.w #80,r5,r5
- add.w _xoff,r5
-
- move.w r1,r6
- muls.l #80*4,r6,r6
-
- move.b 240{s1},r0 ;grau in latch
-
- move.w #20,r2
- eor.l r0,r0
- _l20: move.b (r5.w){s3},r0
- inc.w r5
- move.l _tab(r0*4),r3
- move.l r3,(r6.w){s1}
- move.l r3,80.b(r6.w){s1}
- move.l r3,160(r6.w){s1}
- addq.w #4,r6
-
- dbf.w r2,_l20
- rts.w
-
-
- _draw:
- move.w _xoff,r4
- lsl.w #3,r4
-
- move.l ypos,r0
- move.w r0,_ypos
- lsr.w #2,r0
- add.w _yoff,r0
- muls.l #640,r0,r0
- move.l xpos,r1
- move.w r1,_xpos
- lsr.w #2,r1
- add.w r4,r1
- add.l r1,r0
- eor.b #7,r0
- move.b #$b3,_d10+3 ; bclr.l
- move.b #$73,_d11 ; bcc.b
- bchg.l r0,0{s3}
- bcs.b _d21
- move.b #$ab,_d10+3 ; bset.l
- move.b #$72,_d11 ; bcs.b
-
- _d21: move.w _ypos,r1
- lsr.w #2,r1
- bsr.w maus_off0
- bsr.w _line
- bsr.w maus_on
-
- _d20: move.w xpos,r0
- cmp.w _xpos,r0
- bne.b _d22
- move.l ypos,r0
- sub.w _ypos,r0
- bne.b _d23
-
- bsr.w maus_read
- cmp.b #1,r0
- bne.b _d100
-
- _d22: move.l ypos,r0
- sub.w _ypos,r0
- beq.b _d24
- _d23: asr.w #8,r0
- or.b #1,r0
- _d24: add.w _ypos,r0
- move.w r0,_ypos
-
- lsr.w #2,r0
- add.w _yoff,r0
- muls.l #640,r0,r0
-
- move.l xpos,r1
- sub.w _xpos,r1
- beq.b _d25
- asr.w #8,r1
- or.b #1,r1
- _d25: add.w _xpos,r1
- move.w r1,_xpos
-
- lsr.w #2,r1
- add.w r4,r1
- add.l r1,r0
- eor.b #7,r0
- _d10: bclr.l r0,0{s3}
- _d11: bcc.b _d20
- br.b _d21
-
- _d100: rts.w
-
-
- _scroll:
- move.w xpos,r0
- sub.w _xoff,r0
- move.w r0,_xscroll
- move.w ypos,r0
- lsl.w #3,r0
- sub.w _yoff,r0
- move.w r0,_yscroll
-
- _s10: bsr.w maus_read
- cmp.b #2,r0
- bne.b _d100
-
- move.w xpos,r0
- sub.w _xscroll,r0
- bpl.b _s11
- eor.w r0,r0
- _s11: cmp.w #(640-160)/8,r0
- bls.b _s12
- move.w #(640-160)/8,r0
- _s12:
- move.w ypos,r1
- lsl.w #3,r1
- sub.w _yscroll,r1
- bpl.b _s13
- eor.w r1,r1
- _s13: cmp.w #(480-120),r1
- bls.b _s14
- move.w #(480-120),r1
- _s14:
- cmp.w r0,_xoff
- bne.b _s20
- cmp.w r1,_yoff
- beq.b _s10
- _s20: move.w r0,_xoff
- move.w r1,_yoff
-
- bsr.w maus_off0
- move.w #119,r1
- _s30: bsr.w _line
- dec.w r1
- bpl.b _s30
- bsr.w maus_on
- br.b _s10
-
- _xscroll: dc.w 0
- _yscroll: dc.w 0
-
- _xpos: dc.w 0
- _ypos: dc.w 0
-
- _xoff: dc.w (320-80)/8
- _yoff: dc.w 240-60
- _tab: dc.l $00000000,$0f000000,$f0000000,$ff000000
- dc.l $000f0000,$0f0f0000,$f00f0000,$ff0f0000
- dc.l $00f00000,$0ff00000,$f0f00000,$fff00000
- dc.l $00ff0000,$0fff0000,$f0ff0000,$ffff0000
- dc.l $00000f00,$0f000f00,$f0000f00,$ff000f00
- dc.l $000f0f00,$0f0f0f00,$f00f0f00,$ff0f0f00
- dc.l $00f00f00,$0ff00f00,$f0f00f00,$fff00f00
- dc.l $00ff0f00,$0fff0f00,$f0ff0f00,$ffff0f00
- dc.l $0000f000,$0f00f000,$f000f000,$ff00f000
- dc.l $000ff000,$0f0ff000,$f00ff000,$ff0ff000
- dc.l $00f0f000,$0ff0f000,$f0f0f000,$fff0f000
- dc.l $00fff000,$0ffff000,$f0fff000,$fffff000
- dc.l $0000ff00,$0f00ff00,$f000ff00,$ff00ff00
- dc.l $000fff00,$0f0fff00,$f00fff00,$ff0fff00
- dc.l $00f0ff00,$0ff0ff00,$f0f0ff00,$fff0ff00
- dc.l $00ffff00,$0fffff00,$f0ffff00,$ffffff00
-
- dc.l $0000000f,$0f00000f,$f000000f,$ff00000f
- dc.l $000f000f,$0f0f000f,$f00f000f,$ff0f000f
- dc.l $00f0000f,$0ff0000f,$f0f0000f,$fff0000f
- dc.l $00ff000f,$0fff000f,$f0ff000f,$ffff000f
- dc.l $00000f0f,$0f000f0f,$f0000f0f,$ff000f0f
- dc.l $000f0f0f,$0f0f0f0f,$f00f0f0f,$ff0f0f0f
- dc.l $00f00f0f,$0ff00f0f,$f0f00f0f,$fff00f0f
- dc.l $00ff0f0f,$0fff0f0f,$f0ff0f0f,$ffff0f0f
- dc.l $0000f00f,$0f00f00f,$f000f00f,$ff00f00f
- dc.l $000ff00f,$0f0ff00f,$f00ff00f,$ff0ff00f
- dc.l $00f0f00f,$0ff0f00f,$f0f0f00f,$fff0f00f
- dc.l $00fff00f,$0ffff00f,$f0fff00f,$fffff00f
- dc.l $0000ff0f,$0f00ff0f,$f000ff0f,$ff00ff0f
- dc.l $000fff0f,$0f0fff0f,$f00fff0f,$ff0fff0f
- dc.l $00f0ff0f,$0ff0ff0f,$f0f0ff0f,$fff0ff0f
- dc.l $00ffff0f,$0fffff0f,$f0ffff0f,$ffffff0f
-
- dc.l $000000f0,$0f0000f0,$f00000f0,$ff0000f0
- dc.l $000f00f0,$0f0f00f0,$f00f00f0,$ff0f00f0
- dc.l $00f000f0,$0ff000f0,$f0f000f0,$fff000f0
- dc.l $00ff00f0,$0fff00f0,$f0ff00f0,$ffff00f0
- dc.l $00000ff0,$0f000ff0,$f0000ff0,$ff000ff0
- dc.l $000f0ff0,$0f0f0ff0,$f00f0ff0,$ff0f0ff0
- dc.l $00f00ff0,$0ff00ff0,$f0f00ff0,$fff00ff0
- dc.l $00ff0ff0,$0fff0ff0,$f0ff0ff0,$ffff0ff0
- dc.l $0000f0f0,$0f00f0f0,$f000f0f0,$ff00f0f0
- dc.l $000ff0f0,$0f0ff0f0,$f00ff0f0,$ff0ff0f0
- dc.l $00f0f0f0,$0ff0f0f0,$f0f0f0f0,$fff0f0f0
- dc.l $00fff0f0,$0ffff0f0,$f0fff0f0,$fffff0f0
- dc.l $0000fff0,$0f00fff0,$f000fff0,$ff00fff0
- dc.l $000ffff0,$0f0ffff0,$f00ffff0,$ff0ffff0
- dc.l $00f0fff0,$0ff0fff0,$f0f0fff0,$fff0fff0
- dc.l $00fffff0,$0ffffff0,$f0fffff0,$fffffff0
-
- dc.l $000000ff,$0f0000ff,$f00000ff,$ff0000ff
- dc.l $000f00ff,$0f0f00ff,$f00f00ff,$ff0f00ff
- dc.l $00f000ff,$0ff000ff,$f0f000ff,$fff000ff
- dc.l $00ff00ff,$0fff00ff,$f0ff00ff,$ffff00ff
- dc.l $00000fff,$0f000fff,$f0000fff,$ff000fff
- dc.l $000f0fff,$0f0f0fff,$f00f0fff,$ff0f0fff
- dc.l $00f00fff,$0ff00fff,$f0f00fff,$fff00fff
- dc.l $00ff0fff,$0fff0fff,$f0ff0fff,$ffff0fff
- dc.l $0000f0ff,$0f00f0ff,$f000f0ff,$ff00f0ff
- dc.l $000ff0ff,$0f0ff0ff,$f00ff0ff,$ff0ff0ff
- dc.l $00f0f0ff,$0ff0f0ff,$f0f0f0ff,$fff0f0ff
- dc.l $00fff0ff,$0ffff0ff,$f0fff0ff,$fffff0ff
- dc.l $0000ffff,$0f00ffff,$f000ffff,$ff00ffff
- dc.l $000fffff,$0f0fffff,$f00fffff,$ff0fffff
- dc.l $00f0ffff,$0ff0ffff,$f0f0ffff,$fff0ffff
- dc.l $00ffffff,$0fffffff,$f0ffffff,$ffffffff
-
-
- fill_all:
- cmp.b #$7f,3{s2}
- bne.b _00
- bsr.w hintergrund_halb
- br.b _01
- _00: cmp.b #$bf,3{s2}
- beq.b _01
- bsr.w hintergrund
- _01: move.w r0,-(sp)
- move.w r2,-(sp)
- move.w r5,-(sp)
-
- move.w #fillbuff,r5
- move.w fillcount,r2
- or.w r2,r2
- beq.w _100
-
- _10: move.w (r5.w),r0
- move.w r0,xpos
- move.w 2.b(r5.w),r0
- move.w r0,ypos
- move.w 4.b(r5.w),r0
-
- cmp.w #$0f0f,r0
- bne.b _30
- cmp.b #$7f,3{s2}
- beq.b _30
- cmp.b #$bf,3{s2}
- bne.b _31
-
- _30: move.b r0,color1
- move.b m0,color2
- bsr.w fill
- cmp.l r0,(r5.w)
- beq.b _11
-
- _31: move.w r5,r6
- addq.w #6,r6
- _12: cmp.w #fillbuff_end,r6
- bhs.b _13
- move.w (r6.w),r0
- move.w r0,-6.b(r6.w)
- addq.w #2,r6
- br.b _12
- _13: dec.w fillcount
- move.b #1,color_changed
- subq.w #6,r5
- _11: addq.w #6,r5
- bsr.w read_if_ch
- beq.b _20
-
- cmp.b #$49,m0 ; naechstes Bild
- beq.b _100
- cmp.b #$51,m0 ; vorheriges Bild
- beq.b _100
- cmp.b #27,r0 ; ESC
- beq.b _100
- cmp.b #$52,m0 ; EINFG
- beq.b _100
- cmp.b #$53,m0 ; DEL
- beq.b _100
- cmp.b #$47,m0 ; POS1
- beq.b _100
- cmp.b #$12,m0 ; e
- beq.b _100
- bsr.w read_ch
- _20: dec.w r2
- bne.w _10
-
- _100: move.w (sp)+,r5
- move.w (sp)+,r2
- move.w (sp)+,r0
- rts.w
-
-
- eingabe:
- bsr.w read_ch
-
- cmp.b #' ',r0
- beq.w __00
- cmp.b #$49,m0 ; naechstes Bild
- beq.b _n00
- cmp.b #$51,m0 ; vorheriges Bild
- beq.b _v00
- cmp.b #$52,m0 ; EINFG
- beq.w _ein
- cmp.b #$53,m0 ; DEL
- beq.w _del
- cmp.b #$1f,m0 ; s
- beq.w _s00
- cmp.b #$47,m0 ; POS1
- beq.w _uebersicht
- cmp.b #$12,m0 ; e
- beq.w _edit
-
- cmp.b #$19,m0 ; p
- bne.b _100
- bsr.w hardcopy
-
- _100: rts.w
-
-
- __00: bsr.w hintergrund
- bsr.w fill_all
- br.w _100
- _n00: bsr.w write_bild
- _n01: inc.b name1+1
- cmp.b #'9',name1+1
- bls.b _n10
- move.b #'0',name1+1
- inc.b name1
- cmp.b #'9',name1
- bls.b _n10
- move.b #'0',name1
- _n10: bsr.w get_bild
- bcs.b _n01
- br.b _100
-
- _v00: bsr.w write_bild
- _v01: dec.b name1+1
- cmp.b #'0',name1+1
- bhs.b _v10
- move.b #'9',name1+1
- dec.b name1
- cmp.b #'0',name1
- bhs.b _v10
- move.b #'9',name1
- _v10: bsr.w get_bild
- bcs.b _v01
- br.b _100
-
- _s00: bsr.w write_bmp
- br.b _100
-
- _ein: bsr.w get_bild
- br.b _100
-
- _edit: bsr.w edit_bild
- ; move.w #0,fillcount
- move.w #0,color
- bsr.w fill_screen
- ; bsr.w hintergrund
- bsr.w fill_all
- ; move.b #1,color_changed
- br.w _100
-
- _del:
- move.w #$0211,r0
- trap #$16
- and.b #$03,r0
- beq.b _d0
-
- move.w name1,r6
- move.l #color_file,name2
-
- _d20: move.w #$3d02,r0 ; Datei oeffnen
- move.w #name,r1
- trap #$21
- bcs.b _d10 ; kein Fehler? dann weiter
-
- move.w r0,r3 ; handle nach r3
- move.w #$4200,r0
- eor.w r2,r2
- move.w #3*16,r1
- trap #$21
-
- move.w #$4000,r0
- move.w #2,r2
- move.w #_d50,r1
- trap #$21
-
- move.w #$4000,r0
- eor.w r2,r2
- trap #$21
-
- move.w #$3e00,r0 ; Datei schliessen
- trap #$21
-
- _d10: inc.b name1+1
- cmp.b #'9',name1+1
- bls.b _d11
- move.b #'0',name1+1
- inc.b name1
- cmp.b #'9',name1
- bls.b _d11
- move.b #'0',name1
- _d11: cmp.w r6,name1
- bne.b _d20
-
- _d0: move.w #0,fillcount
- move.w #0,color
- bsr.w fill_screen
- bsr.w fill_all
- move.b #1,color_changed
- br.w _100
-
- _d50: dc.w 0
-
-
-
- _uebersicht:
- bsr.w write_bild
- move.w #15,color
- bsr.w fill_screen
- bsr.w black_gitter
- bsr.w set_grau_palette
- move.w #'00',name1
- br.w _u61
-
- _u60: bsr.w read_if_ch
- beq.b _u64
- bsr.w read_ch
- cmp.b #27,r0
- bne.b _u60
- br.w _n10
-
- _u64: inc.b name1+1
- cmp.b #'9',name1+1
- bls.b _u61
- move.b #'0',name1+1
- inc.b name1
- cmp.b #'9',name1
- bls.b _u61
- move.b #'0',name1
- bsr.w maus_on
-
- _u70: bsr.w read_if_ch
- beq.b _u74
- bsr.w read_ch
- cmp.b #$19,m0 ; p
- bne.b _u79
- bsr.w maus_off
- bsr.w hardcopy
- bsr.w maus_on
- br.b _u70
- _u79: cmp.b #27,r0
- bne.w _u70
- bsr.w maus_off
- br.w _n10
-
- _u74: bsr.w maus_read
- tst.b #1,r0
- beq.b _u70
- bsr.w maus_off
- move.w ypos,r0
- move.b #48,r1
- divs.b r1,m0|r0
- cmp.b #9,r0
- bls.b _u71
- move.b #9,r0
- _u71: add.b #'0',r0
- move.b r0,name1
-
- move.w xpos,r0
- move.b #64,r1
- divs.b r1,m0|r0
- cmp.b #9,r0
- bls.b _u72
- move.b #9,r0
- _u72: add.b #'0',r0
- move.b r0,name1+1
- _u73: bsr.w maus_read
- tst.b #3,r0
- bne.b _u73
- br.w _n10
-
- _u61: bsr.w get_dat
- bcs.w _u60
-
- eor.w r6,r6
- move.w #64*48/4,r2
- eor.l r0,r0
- _u5: move.l r0,(r6.w){s3}
- addq.l #4,r6
- dbf.w r2,_u5
-
- lea.w bit_tab,r3
- eor.w r5,r5
- eor.w r6,r6
-
- move.w #48,r1
- _u30: move.w #10,r4
- _u20: move.w #16,r2
-
- _u10: move.b (r5.w){s2},r0
- lsr.b #3,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- move.w (r5.w){s2},r0
- exg.b r0,m0
- lsr.w #6,r0
- and.b #$1f,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- inc.w r5
- inc.w r6
-
- move.b (r5.w){s2},r0
- lsr.b #1,r0
- and.b #$1f,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- move.w (r5.w){s2},r0
- exg.b r0,m0
- lsr.w #4,r0
- and.b #$1f,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- inc.w r5
- inc.w r6
-
- move.w (r5.w){s2},r0
- exg.b r0,m0
- lsr.w #7,r0
- and.b #$1f,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- inc.w r5
- move.b (r5.w){s2},r0
- lsr.b #2,r0
- and.b #$1f,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- inc.w r6
-
- move.w (r5.w){s2},r0
- exg.b r0,m0
- lsr.w #5,r0
- and.b #$1f,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- inc.w r5
- move.b (r5.w){s2},r0
- and.b #$1f,r0
- move.b (r3.w,r0.b),r0
- add.b r0,(r6.w){s3}
- inc.w r5
- inc.w r6
- dbf.w r2,_u10
-
- subq.w #64,r6
- dec.w r4
- bne.b _u20
- addq.w #64,r6
- dec.w r1
- bne.w _u30
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- eor.l r4,r4
- eor.w r5,r5
- eor.l r3,r3
- move.w #64*48,r2
- eor.l r0,r0
- _u81: move.b (r5.w){s3},r0
- inc.w r5
- cmp.b #6,r0
- bls.b _u86
- add.l r0,r3
- inc.w r4
- _u86: dbf.w r2,_u81
- inc.l r3
- inc.l r4
- mulsq.l #10,r4,r4
-
- eor.w r5,r5
- move.w #64*48,r2
-
- _u82: eor.l r0,r0
- eor.l r1,r1
- move.b (r5.w){s3},r0
- muls.l r4,r0,r0
- divu.l r3,r1|r0
- cmpq.l #15,r0
- bls.b _u85
- move.b #15,r0
- _u85: move.b r0,(r5.w){s3}
- inc.w r5
- dbf.w r2,_u82
-
-
- eor.w r0,r0
- move.b name1,r0
- sub.b #'0',r0
- move.w #80*48,r1
- mulu.w r1,r0,r1|r0
- move.w r0,r6
-
- eor.w r0,r0
- move.b name1+1,r0
- sub.b #'0',r0
- lsl.w #3,r0
- add.w r0,r6
-
- move.w #$3ce,r1
- ; move.b #$80,r3 ; nur falls ohne Rand
- eor.w r5,r5
-
- move.w #47,r4 ; 48 falls ohne Rand
- _u52: move.w #63,r2 ; 64 falls ohne Rand
- move.b #$80,r3 ; nur falls mit Rand
- _u51: move.b (r5.w){s3},m0
- inc.w r5
- eor.b #$0f,m0
- eor.b r0,r0
- out.w r0,r1
-
- move.b (r6.w){s1},r0
- move.b r3,(r6.w){s1}
- ror.b #1,r3
- cmp.b #$80,r3
- bne.b _u53
- inc.w r6
- _u53: dbf.w r2,_u51
- inc.w r5 ; nur falls mit Rand
- add.w #80-7,r6 ; 80-8 falls ohne Rand
- dec.w r4
- bne.b _u52
- br.w _u60
-
-
- bit_tab:dc.b 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
- dc.b 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5
-
-
-
- meld1: dc.b ' : Pruefsummenfehler',0
- meld2: dc.b 'Nicht genuegend Speicher',0
- meld3: dc.b 'bild??.dat nicht gefunden',0
- meld4: dc.b 'Maustreiber nicht installiert',0
- meld5: dc.b 13,10,'V 1.02: Please report any bug to',
- dc.b ' klee@informatik.unibw-muenchen.de',0
-
- main:
- move.w #$100,r5
- move.w #checksum,r6
- eor.l r0,r0
- _5: add.l (r5.w),r0
- addq.l #4,r5
- cmp.w r6,r5
- bls.b _5
- or.l r0,r0
- beq.b _6
-
- if check
- sub.l checksum,r0
- neg.l r0
- bsr.w print_hex_l
- move.w #meld1,r0
- bsr.w print_string
- br.w ende
- endif
-
- _6: eor.w r0,r0
- trap #$33
- inc.w r0
- beq.b _4
- move.w #meld4,r0
- bsr.w print_string
- br.w ende
-
- _4: move.w #$40,r0
- move.w r0,s1
- move.w 8{s1},r0 ; verwende LPT1:
- move.w r0,LPT_DAT
- inc.w r0
- move.w r0,LPT_STAT
- inc.w r0
- move.w r0,LPT_COMM
-
- move.w #$80,r5
- move.b (r5.w),r0
- _12: cmp.w #'m-',(r5.w)
- beq.b _11
- cmp.w #'c-',(r5.w)
- beq.b _14
- cmp.w #'v-',(r5.w)
- beq.b _17
- cmp.w #'2-',(r5.w)
- beq.b _18
- _19: inc.w r5
- dec.b r0
- bpl.b _12
- br.b _13
- _18: move.w 10{s1},r0 ; verwende LPT2:
- move.w r0,LPT_DAT
- inc.w r0
- move.w r0,LPT_STAT
- inc.w r0
- move.w r0,LPT_COMM
- br.b _19
- _11: move.b #0,.no_change_color+2
- _14: move.b #255,.no_mix_color+4
- br.b _19
- _17: move.b #1,.no_right_button+1
- br.b _19
- _13: move.w #$a000,r0
- move.w r0,s1
- move.w s0,r0
- add.w #$1000,r0
- move.w r0,s2
- add.w #$1000,r0
- move.w r0,s3 ; Daten hinter Codesegment
- add.w #$1000,r0
- cmp.w 2.w,r0 ; Speicherende aus dem PSP
- blo.b _7
- move.w #meld2,r0
- bsr.w print_string
- br.w ende
- ; s1 Bildspeicher
- ; s2 Bild
- ; s3 Fill-Puffer
- _7: bsr.w init_graph
- bsr.w maus_init
-
- _41: bsr.w get_bild
- bcc.b _8
-
- inc.b name1+1
- cmp.b #'9',name1+1
- bls.b _41
- move.b #'0',name1+1
- inc.b name1
- cmp.b #'9',name1
- bls.b _41
-
- move.w #$03,r0
- trap #$10
- move.w #meld3,r0
- bsr.w print_string
- br.w ende
-
- _8: move.w #1,color1
- move.w #1,color2
- bsr.w maus_on
-
- _10: bsr.w maus_read
- tst.b #$01,r0
- beq.b _31
-
- bsr.w maus_off
- bsr.w fill
- move.b #1,color_changed
- tst.b #$ff,auto_color
- beq.b _39
- move.w color1,r0
- _21: add.b #5,r0
- and.w #$000f,r0
- beq.b _21
- cmp.b #15,r0
- beq.b _21
- move.w r0,color1
- move.w r0,color2
- br.b _39
-
- .no_right_button:
- _31: tst.b #$02,r0
- beq.b _30
- bsr.w maus_off
- bsr.w new_color
- _39: bsr.w maus_read
- or.b r0,r0
- bne.b _39
- bsr.w maus_on
-
- _30: bsr.w read_if_ch
- beq.w _10
- cmp.b #27,r0
- beq.w _100
- bsr.w maus_off
- bsr.w eingabe
- bsr.w maus_on
- br.w _10
-
- _99: bsr.w read_ch
- _100: bsr.w write_bild
- ; Textmode
- move.w #$03,r0
- trap #$10
-
- br.w ende
-
- even4
- xpos: dc.l 0
- ypos: dc.l 0
- xpos1: dc.l 0
- ypos1: dc.l 0
- color: dc.w 0
- color1: dc.w 0
- color2: dc.w 0
- auto_color: dc.w $00ff
- color_changed: dc.b 0
- data_changed: dc.b 0
- name: dc.b 'bild'
- name1: dc.b '00'
- name2: dc.b '.dat',0
-
- palette_org:
- dc.b 00,00,00, 63,00,00, 63,21,00, 63,31,15
- dc.b 63,37,00, 63,42,00, 00,63,00, 00,63,31
- dc.b 42,63,00, 00,15,63, 00,38,63, 37,63,63
- dc.b 42,42,63, 63,63,00, 47,51,22, 63,63,63
-
- palette_grau:
- dc.b 00,00,00, 04,04,04, 08,08,08, 12,12,12
- dc.b 16,16,16, 20,20,20, 24,24,24, 28,28,28
- dc.b 32,32,32, 36,36,36, 40,40,40, 44,44,44
- dc.b 48,48,48, 52,52,52, 56,56,56, 63,63,63
-
-
-
- write_bild:
- tst.b #$ff,color_changed
- beq.b _10
- bsr.w write_col
- _10: tst.b #$ff,data_changed
- beq.b _100
- bsr.w write_dat
- _100: rts.w
-
- write_col:
- movem.l r0-r7,-(sp)
-
- move.w #fillbuff,r5
- move.w fillcount,r2
- or.w r2,r2
- beq.b _20
- move.w r5,r6
-
- _30: move.l 2.b(r5.w),r0
- rol.l #12,r0
- lsr.b #4,r0
- ror.l #12,r0
- lsl.w #4,r0
- lsl.l #8,r0
- add.w (r5.w),r0
- move.l r0,(r6.w)
- addq.w #6,r5
- addq.w #4,r6
- dbf.w r2,_30
-
-
- _20: move.l #color_file,name2
- move.w #$3c00,r0 ; Datei oeffnen
- move.w #name,r1
- move.w #0,r2
- trap #$21
- bcs.w _100 ; Fehler? dann aufhoeren
- move.w r0,r3 ; handle nach r3
-
- move.w #$4000,r0
- move.w fillcount,r2
- lsl.w #2,r2
- add.w #2+16*3,r2
- move.w #palette,r1
- trap #$21
-
- move.w #$3e00,r0 ; Datei schliessen
- trap #$21
- move.b #0,color_changed
-
- _100: movem.l (sp)+,r0-r7
- rts.w
-
-
- write_dat:
- movem.l r0-r7,-(sp)
- move.w s0,-(sp)
-
- move.w s3,r0
- move.w r0,s0
-
- eor.w r6,r6
- eor.w r5,r5
-
- move.w #3,r3
- move.w #480/ycount,r1 ; ycount Byte untereinander dann die
- _72: move.b #80/4,m0 ; naechsten ycount Byte daneben usw.
- _71: move.w #ycount,r2
- _70: move.b (r3.w,r5.w){s2},r0
- add.w #80,r5
- not.b r0
- move.b r0,(r6.w)
- inc.w r6
- dbf.w r2,_70
- sub.w #ycount*80,r5
- dec.b r3
- bpl.b _71
- and.b #3,r3
- addq.w #4,r5
- dec.b m0
- bne.b _71
- add.w #(ycount-1)*80,r5
- dec.w r1
- bne.b _72
-
- move.w s2,r0
- move.w r0,s0
-
- move.w #640*480/8,r2
- eor.w r5,r5
- eor.w r6,r6
-
- eor.b r1,r1
- move.l r5,r4
-
- _80: bsr.w _out_null ;comprimieren
- _81: cmp.w #0,(r5.w){s3}
- beq.b _90
- inc.w r5
- inc.b r1
- cmp.b #128,r1
- blo.b _82
- bsr.w _out_muster
- _82: dbf.w r2,_81
- bsr.w _out_muster
- br.b _59
-
- _90: bsr.w _out_muster
- _91: cmp.b #0,(r5.w){s3}
- bne.b _80
- inc.w r5
- inc.b r1
- cmp.b #128,r1
- blo.b _92
- bsr.w _out_null
- _92: dbf.w r2,_91
- bsr.w _out_null
- br.b _59
-
- _59: move.w s6,r0
- move.w r0,s0
- move.l #'tad.',name2
- move.w #$3c00,r0 ; Datei oeffnen
- move.w #name,r1
- move.w #0,r2
- trap #$21
- bcs.w _100 ; Fehler? dann eben nicht schreiben
- move.w r0,r3 ; handle nach r3
-
- move.w s2,r0
- move.w r0,s0
- move.w #$4000,r0
- eor.w r1,r1
- move.w r6,r2
- trap #$21
-
- move.w #$3e00,r0 ; Datei schliessen
- trap #$21
- move.b #0,data_changed
-
- _100: move.w (sp)+,s0
- movem.l (sp)+,r0-r7
- rts.w
-
- _out_null:
- dec.b r1
- bmi.b _on2
- or.b #$80,r1
- move.b r1,(r6.w)
- inc.w r6
- move.l r5,r4
- _on2: eor.b r1,r1
- rts.w
-
- _out_muster:
- exg.l r4,r5
- dec.b r1
- bmi.b _om2
- move.b r1,(r6.w)
- inc.w r6
- _om1: move.b (r5.w){s3},r0
- inc.w r5
- move.b r0,(r6.w)
- inc.w r6
- dec.b r1
- bpl.b _om1
- _om2: eor.b r1,r1
- rts.w
-
-
- write_bmp:
- movem.l r0-r7,-(sp)
- move.l #'pmb.',name2
- move.w #$3c00,r0
- eor.w r2,r2
- move.w #name,r1
- trap #$21
- bcs.w _100
- move.w r0,r3
-
- move.w #$4000,r0
- move.w #_head_lang,r2
- move.w #_head,r1
- trap #$21
- bcs.w _110
- cmp.w #_head_lang,r0
- bne.w _110
-
- move.w #1023,r6
-
- move.w #$3c6,r1 ; Video DAC Pixel Mask Register
- in.b r1,r0
- move.b r0,r2
- move.w #$00ff,r4
-
- _20: move.w r4,r0
- and.b r2,r0
- move.w #$3c7,r1 ; Video DAC Pixel Address (Read Mode)
- out.b r0,r1
- move.w #$3c9,r1 ; Video DAC Pixel Data Register
-
- move.b #255,(r6.w){s3} ; not used
- dec.w r6
- bsr.w wait
- in.b r1,r0 ; rot
- lsl.b #2,r0
- beq.b _21
- or.b #3,r0
- _21: move.b r0,(r6.w){s3}
- dec.w r6
- bsr.w wait
- in.b r1,r0 ; gruen
- lsl.b #2,r0
- beq.b _22
- or.b #3,r0
- _22: move.b r0,(r6.w){s3}
- dec.w r6
- bsr.w wait
- in.b r1,r0 ; blau
- lsl.b #2,r0
- beq.b _23
- or.b #3,r0
- _23: move.b r0,(r6.w){s3}
- dec.w r6
-
- dec.w r4
- bpl.b _20
-
- move.w s0,-(sp)
- move.w s3,r0
- move.w r0,s0
- move.w #$4000,r0
- move.w #1024,r2
- move.w #0,r1
- trap #$21
- move.w (sp)+,s0
- bcs.b _110
- cmp.w #1024,r0
- bne.b _110
- move.w r3,_handle
-
- move.w #5,_count
- move.l #479*640,r5
- move.w #640,r4
- _60: move.w #61440,r2
- move.w #_trans,r3
- eor.w r6,r6
- _50:
- bsr.w get_color
- inc.l r5
- dec.w r4
- bne.b _51
- sub.l #2*640,r5
- move.w #640,r4
- _51: move.b (r3.w,r0.b),r0
- move.b r0,(r6.w){s3}
- inc.w r6
- dbf.w r2,_50
-
- move.w _handle,r3
- move.w s0,-(sp)
- move.w s3,r0
- move.w r0,s0
- move.w #$4000,r0
- move.w #61440,r2
- move.w #0,r1
- trap #$21
- move.w (sp)+,s0
- bcs.b _110
- cmp.w #61440,r0
- bne.b _110
- dec.w _count
- bne.b _60
-
- _110: move.w #$3e00,r0
- trap #$21
- _100: movem.l (sp)+,r0-r7
- rts.w
-
- _handle:dc.w 0
- _count: dc.w 0
- _trans: dc.b 0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63
-
- _head: dc.b $42,$4d,$36,$b4,$04,$00,$00,$00,$00,$00,$36,$04,$00,$00,$28,$00
- dc.b $00,$00,$80,$02,$00,$00,$e0,$01,$00,$00,$01,$00,$08,$00,$00,$00
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $00,$00,$00,$00,$00,$00
- _head_lang=@-_head
-
-
- ;**************************************************************************
- ;* *
- ;* Hardcopy VGA 640x480 16 Farben *
- ;* *
- ;**************************************************************************
-
-
- LPT=0 ; 0 fuer Adresse $3bc (falls vorhanden LPT1:)
- ; 1 fuer Adresse $378 (meist LPT1:)
- ; 2 fuer Adresse $278 (meist LPT2:)
-
- CONTRAST=1 ; 0 fuer Orginalhelligkeit
- ; 1 fuer Kontrastverstaerkung und Aufhellung
-
-
- hardcopy:
- movem.l r0-r7,-(sp)
- move.w s0,-(sp)
- move.w s1,-(sp)
- move.w s6,r0
- move.w r0,s0
- move.w #$a000,r0
- move.w r0,s1
-
- move.w #$3c6,r1 ; Video DAC Pixel Mask Register
- in.b r1,r0
- move.b r0,r2
- move.w #$00ff,r3
-
- _20: move.b r3,r0
- and.b r2,r0
- move.w #$3c7,r1 ; Video DAC Pixel Address (Read Mode)
- out.b r0,r1
- move.w #$3c9,r1 ; Video DAC Pixel Data Register
- bsr.w wait
- in.b r1,r0 ; rot
- and.w #$3f,r0
- mulsq.w #39,r0,r4 ; 39/130 (0.30)
- bsr.w wait
- in.b r1,r0 ; gruen
- and.w #$3f,r0
- mulsq.w #77,r0,r0 ; 77/130 (0.59)
- add.w r0,r4
- bsr.w wait
- in.b r1,r0 ; blau
- and.w #$3f,r0
- mulsq.w #14,r0,r0 ; 14/130 (0.11)
- add.w r4,r0
- lsr.w #5,r0
- move.b r0,tab(r3.w)
- dec.w r3
- bpl.b _20
-
- move.b tab+20,r0
- move.b r0,tab+6
- move.b tab+56,r0
- move.b r0,tab+8
- move.b tab+57,r0
- move.b r0,tab+9
- move.b tab+58,r0
- move.b r0,tab+10
- move.b tab+59,r0
- move.b r0,tab+11
- move.b tab+60,r0
- move.b r0,tab+12
- move.b tab+61,r0
- move.b r0,tab+13
- move.b tab+62,r0
- move.b r0,tab+14
- move.b tab+63,r0
- move.b r0,tab+15
-
-
- IF CONTRAST
- ; hoechste und niedrigste Helligkeit berechnen
- move.w #$00ff,r3
- move.w r3,r1 ; min
- eor.w r2,r2 ; max
- _50: move.b tab(r3.w),r0
- cmp.b r1,r0
- bhs.b _51
- move.b r0,r1 ; min
- _51: cmp.b r2,r0
- bls.b _52
- move.b r0,r2 ; max
- _52: dec.w r3
- bpl.b _50
- move.w r1,r5 ; xmin
- sub.b r1,r2 ; max-min
- beq.b _70
-
- ; Kontrast erhoehen
- move.w #$00ff,r3
- move.w r3,r4
- _53: movu.bw tab(r3.w),r0
- sub.w r5,r0
- muls.w r4,r0,r1|r0
- divs.w r2,r1|r0
- move.b r0,tab(r3.w) ; 255*(x-xmin) / (xmax-xmin)
- dec.w r3
- bpl.b _53
-
- ; mittlere Helligkeit des Bildes berechnen
- move.w #tab,r3
- move.w #320*200,r2
- eor.l r0,r0
- eor.l r4,r4
- eor.w r5,r5
- _54: move.b (r5.w){s1},r0
- inc.w r5
- move.b (r3.w,r0.b),r0
- add.l r0,r4
- dbf.w r2,_54
- cmp.l #320*200*128,r4 ; Bild hell genug?
- bhi.b _70
-
- ; Helligkeit erhoehen
- move.w #$00ff,r3
- move.w r3,r2
- _55: movu.bw tab(r3.w),r0
- move.w #510,r1
- sub.w r0,r1
- muls.w r1,r0,r1|r0
- divs.w r2,r1|r0
- move.b r0,tab(r3.w) ; x*(510-x)/255
- dec.w r3
- bpl.b _55
- _70:
- ENDIF
-
- move.b #1,plot_ok
- move.l #ps_ini,r1
- bsr.w plot_string
-
- move.w #tab,r3
- move.l #640*480,r2
- eor.l r5,r5
- _30: bsr.w get_color
- inc.l r5
- move.b (r3.w,r0.b),r0
- bsr.w plot_hex_byte
- tst.b #$ff,plot_ok
- beq.b _40 ; Timeout
- dbf.l r2,_30
-
- move.l #ps_end,r1
- bsr.w plot_string
-
- _40: move.w (sp)+,s1
- move.w (sp)+,s0
- movem.l (sp)+,r0-r7
- rts.w
-
- get_color:
- move.w r2,-(sp)
- move.w r3,-(sp)
- move.w r4,-(sp)
- move.l r5,-(sp)
- move.l r6,-(sp)
-
- move.l r5,r6
- lsr.l #3,r6
- and.w #7,r5
- eor.w #7,r5
- eor.w r4,r4
- move.w #$3ce,r1 ; Graphics Controller Index Register
-
- move.w #$0304,r0 ; Register 4 (Read Plane Select) = 3
- move.w #4,r2
- _20: out.w r0,r1
- move.b (r6.w){s1},r3
- add.w r4,r4
- btst.w r5,r3
- bcc.b _10
- inc.w r4
- _10: sub.w #$0100,r0
- dbf.w r2,_20
- move.w r4,r0
-
- move.l (sp)+,r6
- move.l (sp)+,r5
- move.w (sp)+,r4
- move.w (sp)+,r3
- move.w (sp)+,r2
- rts.w
-
-
- wait: move.w r2,-(sp)
- move.w #100,r2
- _10: dbf.w r2,_10
- move.w (sp)+,r2
- rts.w
-
- ps_ini:
- dc.b 04
- dc.b ' /zeile 640 string def'
- dc.b ' 585 30 translate'; x-Richtung: 1 Bildpunkt = 5 Laserpunkte
- dc.b ' 90 rotate' ; y-Richtung: 1 Bildpunkt = 5 Laserpunkte
- dc.b ' 768 576 scale' ; (640*72/300)*5 , (480*72/300)*5
- dc.b ' 640 480 8 [640 0 0 -480 0 480]'
- dc.b ' {currentfile zeile readhexstring pop }'
- dc.b ' image '
- dc.b 0
-
- ps_end:
- dc.b ' showpage ',04,0
-
- LPT_DAT: dc.w $3bc
- LPT_STAT:dc.w $3bd
- LPT_COMM:dc.w $3be
-
- plot_ok: dc.b 0
-
- plot_ch:
-
- ; gibt Zeichen in r0.b an Drucker aus
- ; Eingabe: r0.b : auszugebendes Zeichen
- ; Ausgabe: keine
- ; veraenderte Register: keine
-
- tst.b #$ff,plot_ok
- beq.b _102
-
- move.w r0,-(sp)
- move.w r1,-(sp)
- move.l r2,-(sp)
- move.b r0,m0
-
- move.l #$10000000,r2
- move.w LPT_STAT,r1
- _10: in.b r1,r0
- tst.b #$80,r0 ; BUSY
- dbne.l r2,_10
- beq.b _100 ; timeout
-
- move.b m0,r0
- move.w LPT_DAT,r1
- out.b r0,r1 ; Datenbyte
-
- move.w LPT_COMM,r1
- in.b r1,r0
- move.b r0,m0
- move.b #$0f,r0
- out.b r0,r1 ; STROBE aktiv
- move.w #10,r2
- _11: dbf.w r2,_11
- move.b #$0e,r0
- out.b r0,r1 ; STROBE inaktiv
-
- move.l #$10000000,r2
- move.w LPT_STAT,r1
- _20: in.b r1,r0
- tst.b #$80,r0 ; BUSY
- dbne.l r2,_20
- bne.b _30
- move.b #0,plot_ok ; timeout
-
- _30: move.b #$ff,r0
- move.w LPT_DAT,r1
- out.b r0,r1 ; Datenleitungen high
-
- move.b m0,r0
- move.w LPT_COMM,r1
- out.b r0,r1
- br.b _101
-
- _100: move.b #0,plot_ok
- _101: move.l (sp)+,r2
- move.w (sp)+,r1
- move.w (sp)+,r0
- _102: rts.w
-
-
- plot_string:
- ; gibt String (mit 0 abgeschlossen) an Drucker aus
- ; Eingabe: r1.l{s0} : Zeiger auf String
- ; Ausgabe: keine
- ; veraenderte Register: keine
-
- move.w r0,-(sp)
- move.l r1,-(sp)
-
- _20: move.b (r1),r0
- inc.w r1
- tst.b r0,r0
- beq.b _10
- bsr.w plot_ch
- br.b _20
- _10: move.l (sp)+,r1
- move.w (sp)+,r0
- rts.w
-
-
- plot_hex_byte:
- ; gibt Byte in Hexform an Drucker aus
- ; Eingabe: r0.b : auszugebendes Byte
- ; Ausgabe: keine
- ; veraenderte Register: keine
-
- move.w r0,-(sp)
- move.b r0,m0
-
- lsr.b #4,r0
- add.b #'0',r0
- cmp.b #'9',r0
- bls.b _10
- add.b #'a'-'0'-10,r0
- _10: bsr.w plot_ch
-
- move.b m0,r0
- and.b #$0f,r0
- add.b #'0',r0
- cmp.b #'9',r0
- bls.b _20
- add.b #'a'-'0'-10,r0
- _20: bsr.w plot_ch
-
- move.b #13,r0
- bsr.w plot_ch
- move.b #10,r0
- bsr.w plot_ch
-
- move.w (sp)+,r0
- rts.w
-
-
-
- ;**************************************************************************
- ;* *
- ;* Ende Hardcopy VGA 640x480 16 Farben *
- ;* *
- ;**************************************************************************
-
-
-
- even4
- checksum: dc.l check ; muss am Ende des Codes stehen
-
- palette: blk.b 3*16
- fillcount: blk.w 1
- maxfill=1024
- fillbuff: blk.w maxfill*6
- fillbuff_end:
- bild_save: blk.b 4*4*32*4*4
- tab: blk.b 256 ; hier 256 Byte fuer Helligkeitstabelle
-
-